package cn.harry.cabinet.server.dto.common

import kotlinx.serialization.InternalSerializationApi
import kotlinx.serialization.Serializable

/**
 * 统一API响应格式
 * @param code 响应状态码，200表示成功
 * @param message 响应消息
 * @param data 响应数据
 */
@Serializable
@InternalSerializationApi
data class ApiResponse<T>(
    val code: Int,
    val message: String,
    val data: T? = null
) {
    companion object {
        /**
         * 成功响应
         */
        inline fun <reified T> success(data: T, message: String = "操作成功"): ApiResponse<T> {
            return ApiResponse(200, message, data)
        }

        /**
         * 成功响应（无数据）
         */
        fun success(message: String = "操作成功"): ApiResponse<Unit> {
            return ApiResponse(200, message, null)
        }

        /**
         * 错误响应
         */
        inline fun <reified T> error(code: Int, message: String): ApiResponse<T> {
            return ApiResponse(code, message, null)
        }

        /**
         * 400 错误响应
         */
        inline fun <reified T> badRequest(message: String): ApiResponse<T> {
            return ApiResponse(400, message, null)
        }

        /**
         * 500 错误响应
         */
        inline fun <reified T> internalError(message: String): ApiResponse<T> {
            return ApiResponse(500, message, null)
        }

        /**
         * 通用错误响应（无类型参数）
         */
        fun errorResponse(code: Int, message: String): ApiResponse<Unit> {
            return ApiResponse(code, message, null)
        }
    }
} 